using System.Collections; using System.Collections.Generic; using UnityEngine; public class AutomaticExpressionChange : StateMachineBehaviour { readonly float minExpressionTime = 1; readonly float maxExpressionTime = 5; float expressionTimer = 0; string[] expressionTriggers = {"Happy","Angry","Sad","Smile","Surprised","Eyebrow_Sad","EyebrowAngry"}; // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state //override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // //} // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if(expressionTimer<=0) { RandomExpression(animator); expressionTimer = Random.Range(minExpressionTime, maxExpressionTime); } else { expressionTimer -= Time.deltaTime; } } void RandomExpression(Animator animator) { System.Random rnd = new System.Random(); int expressionIndex = rnd.Next(expressionTriggers.Length); string expressionTrigger = expressionTriggers[expressionIndex]; animator.SetTrigger(expressionTrigger); } // OnStateExit is called when a transition ends and the state machine finishes evaluating this state //override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // //} // OnStateMove is called right after Animator.OnAnimatorMove() //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // // Implement code that processes and affects root motion //} // OnStateIK is called right after Animator.OnAnimatorIK() //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) //{ // // Implement code that sets up animation IK (inverse kinematics) //} }